#include "head.h"
#include"pool.h"

thread_pool* x=NULL;
int sockfd;
void handler(int sig)                   // ctrl+c关闭服务器时，回收空间关闭套接字
{
    threadpool_destry(x);
    close(sockfd);
    printf("退出服务器成功\n");
    exit(0); // 清空缓存区，退出整个程序
}

void* fun(void* argp)
{
    int sockfd=*(int*)argp;
    user ret;
    while (1)
    { 
        ret = enter(sockfd);
        if (ret.dl == 0) // enter返回值为0的时候登录成功
        {
            int f=who_up(sockfd,ret.id);
            while (1)
            {
                if (9 == function(sockfd, ret.id,f)) // 当客户端选择退出程序，通信套接字断开，返回9退出服务器
                    break;
            }
        }
        if (ret.dl == 5) // 用户选择退出程序选项时，返回值为5的时候，客户端断开连接，随之服务器关闭
        {
            break;
        }
    }
    close(sockfd);
    return NULL;
}

void test_1(char *str1, char *str2)
{
    
    int sockfd_1;
    //user ret;
    
    printf("服务器开启....\n");
    
    sockfd_1 = sock_init(str1, str2);
    
    thread_pool pool;
    if(threadpool_init(&pool,5,5)==-1)
    {
        printf("线程池创建失败\n");
        return ;
    }
    signal(SIGINT, handler);
    x=&pool;
    sockfd=sockfd_1;
    //pthread_cleanup_push(threadpool_destry,(void*)&pool);
    while(1)
    {
        int sockfd_2 = connect_1(sockfd_1);
        const char *p = "欢迎访问服务器";
        send(sockfd_2, p, strlen(p), 0); // 并向相应连接的客户端发送：“欢迎访问服务器”
        task_add(&pool,fun,(void*)&sockfd_2);
    } 
    //threadpool_destry(&pool);
    close(sockfd_1); // 关闭套接字
    //pthread_cleanup_pop(0);

}